package com.hengshan.job;

import com.hengshan.common.utils.RedisUtil;
import com.hengshan.domain.entity.Article;
import com.hengshan.service.impl.ArticleServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Component
@RequiredArgsConstructor
public class UpdateViewCount {

    private final RedisUtil redisUtil;
    private final ArticleServiceImpl articleService;

    // */5 * * * * ? 每隔5秒执行一次
    // 0 */1 * * * ? 每隔1分钟执行一次
    // 0 0 23 * * ? 每天23点执行一次
    // 0 0 1 1 * ? 每月1号凌晨1点执行一次
    // 0 0 23 L * ?  每月最后一天23点执行一次
    // 0 0 1 ? * L 每周星期天凌晨1点实行一次
    // 0 26,29,33 * * * ?  在26分、29分、33分执行一次
    // 0 0 0,13,18 * * ?  每天的0点、13点、18点都执行一次
    @Scheduled(cron = "0 0 23 * * ?")
    public void updateViewCount() {
        //获取redis中的浏览量
        Map<String, Integer> viewCountMap = (Map<String, Integer>) redisUtil.get("article:viewCount");
        List<Article> articles = viewCountMap.entrySet().stream()
                .map(entry -> new Article(Integer.valueOf(entry.getKey()), entry.getValue()))
                .collect(Collectors.toList());
        //更新到数据库中
        articleService.updateBatchById(articles);

    }
}
